package org.example.controller;


import org.example.Result;
import org.example.anno.PreAuth;
import org.example.anno.User;
import org.example.model.LoginUser;
import org.example.xxljob.XxlJobServiceApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



@RestController
public class AccountController {

    @Autowired
    private XxlJobServiceApi xxlJobServiceApi;




    @RequestMapping("/hello")
    @PreAuth("account:say:hello")
    public Object hello(@User LoginUser loginUser) {
        //        获取当前登录成功的登录信息
//        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
////        获得登录用户的名称
//        String name = authentication.getName();
        //从httpSession里面获取登录对象，一般不这样做，因为我们还是希望可以在同一个线程的
        //SecurityContext spring_security_context = (SecurityContext) session.getAttribute("SPRING_SECURITY_CONTEXT");
        //String name1 = spring_security_context.getAuthentication().getName();
        //System.out.println("name1 = " + name1);
        //Result<Object> objectResult = xxlJobServiceApi.allJobs();
        return Result.success(loginUser);
    }


    /**
     * 默认流控规则 - 直接流控  - 某个接口的qps超过阈值 直接让这个接口快速失败
     * 流控规则 - 关联流控
     * 有两个接口 /user/query 和 /user/update，
     * 接口 /user/update 优先级高于 /user/query，
     * 当 /user/update 达到阈值时，直接让 /user/query 快速失败， 防止 /user/query 抢占资源
     * 流控-链路
     * */

    @RequestMapping("/user/query")
    @PreAuth("account:say:hello")
    public Object userQuery(@User LoginUser loginUser) {
        return Result.success(loginUser);
    }

    @RequestMapping("/user/update")
    @PreAuth("account:say:hello")
    public Object userUpdate(@User LoginUser loginUser) {
        return Result.success("user update success");
    }





}
